package com.roamer.audition.common.service;

import com.roamer.audition.common.request.CompanyDTO;
import com.roamer.audition.common.request.CompanyPageQuery;
import com.roamer.audition.common.request.CompanyQuery;
import com.roamer.audition.common.response.CompanyVO;
import com.roamer.rest.exception.suppert.DataNotFoundException;
import org.springframework.data.domain.Page;

import java.util.Collection;
import java.util.List;

/**
 * 公司 业务处理接口
 *
 * @author roamer
 * @version V1.0
 * @date 2019-08-20 22:59
 */
public interface CompanyService {

    /**
     * 创建公司
     *
     * @param companyDTO 公司DTO
     * @return {@code CompanyVO}
     */
    CompanyVO createCompany(CompanyDTO companyDTO);

    /**
     * 创建公司
     *
     * @param companyDTOList 公司DTO
     * @return {@code CompanyVO}
     */
    List<CompanyVO> createCompany(Collection<CompanyDTO> companyDTOList);

    /**
     * 修改公司
     *
     * @param companyDTO 公司DTO
     * @return {@code CompanyVO}
     * @throws DataNotFoundException 公司不存在
     */
    CompanyVO updateCompany(CompanyDTO companyDTO) throws DataNotFoundException;

    /**
     * 删除公司，同时删除关联面试计划
     *
     * @param id 公司ID
     *
     * @throws DataNotFoundException 公司不存在
     */
    void deleteCompany(Long id) throws DataNotFoundException;

    /**
     * 获取公司
     *
     * @param id 公司ID
     *
     * @return {@code CompanyVO}
     *
     * @throws DataNotFoundException 公司不存在
     */
    CompanyVO getCompany(Long id) throws DataNotFoundException;

    /**
     * 分页查询
     *
     * @param companyPageQuery 分页查询参数
     *
     * @return {@code Page<CompanyVO>}
     */
    Page<CompanyVO> getCompanyPage(CompanyPageQuery companyPageQuery);

    /**
     * 查询公司列表
     *
     * @param companyQuery 查询参数
     * @return {@code List<CompanyVO>}
     */
    List<CompanyVO> getCompanyList(CompanyQuery companyQuery);

    /**
     * 查询公司列表
     *
     * @return {@code List<CompanyVO>}
     */
    List<CompanyVO> getCompanyList();

    /**
     * 查询公司列表个数
     *
     * @return {@code List<CompanyVO>}
     */
    Long getAllCount();
}
